﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>
#include <QTcpServer>
#include <QHostAddress>
#include <QHostInfo>
#include <QDir>
#include <QThread>
#include "mytcpserver.h"
#include "mytcpsocket.h"
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:

    void onNewDescript(qintptr socketDescriptor);//把套接字描述符号发送到其他线程
    void onSocketReady(int index);//当其他线程成功创建套接字时调用此函数
    void onReadyRead();//当某个线程有消息接收时调用此函数


signals:
    void moveDescriptToThread(qintptr socketDescriptor,int index);//将套接字移动到其他线程
    void closeSocket(int index);//关闭某个线程和其套接字
    void sendByteArray(QByteArray array,int index);//指定某个线程和套接字发送指定数据


private slots:
    void on_btnListen_clicked();


private:
    Ui::MainWindow *ui;

    enum tpType{FILELIST,FILE};//两种数据传输模式,文件列表发送模式和文件发送模式
    tpType m_type;//记录当前传输模式
    myTcpServer* m_tcpServer;//创建tcp监听指针

    void init();//初始化函数

    QList<QThread*> m_threads;//创建线程指针列表
    QList<myTcpSocket*> m_tcpSockets;//创建套接字指针列表



};
#endif // MAINWINDOW_H
